package org.chen.controller;

import org.chen.domain.entity.BackgroundResource;
import org.chen.domain.response.Result;
import org.chen.service.HeyGenUploadService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

@RestController
@RequestMapping("/api/upload")
public class UploadController {

    @Autowired
    private HeyGenUploadService heyGenUploadService;

    /**
     * 上传背景资源到HeyGen
     */
    @PostMapping("/background")
    public Result<BackgroundResource> uploadBackground(
            @RequestParam("file") MultipartFile file,
            @RequestParam("fileType") String fileType) throws IOException {

        // 读取文件的前几个字节来确定文件类型
        byte[] bytes = new byte[8];
        try (InputStream is = file.getInputStream()) {
            is.read(bytes, 0, bytes.length);
        }

        boolean isValidFileType = false;

        if ("image".equals(fileType)) {
            // JPEG 文件的魔数: FF D8 FF
            if (bytes[0] == (byte) 0xFF && bytes[1] == (byte) 0xD8 && bytes[2] == (byte) 0xFF) {
                isValidFileType = true;
            }
            // PNG 文件的魔数: 89 50 4E 47 0D 0A 1A 0A
            else if (bytes[0] == (byte) 0x89 && bytes[1] == (byte) 0x50 && bytes[2] == (byte) 0x4E &&
                    bytes[3] == (byte) 0x47 && bytes[4] == (byte) 0x0D && bytes[5] == (byte) 0x0A &&
                    bytes[6] == (byte) 0x1A && bytes[7] == (byte) 0x0A) {
                isValidFileType = true;
            }

            if (!isValidFileType) {
                return Result.error("无效的图片文件，只支持JPEG或PNG格式");
            }
        } else if ("video".equals(fileType)) {
            // MP4 文件的魔数通常以 FTYP 开头，位于第4-8个字节
            if (bytes[4] == (byte) 0x66 && bytes[5] == (byte) 0x74 &&
                    bytes[6] == (byte) 0x79 && bytes[7] == (byte) 0x70) {
                isValidFileType = true;
            }
            // WebM 文件检测需要更复杂的逻辑，这里简化处理

            if (!isValidFileType) {
                return Result.error("无效的视频文件，只支持MP4或WebM格式");
            }
        } else {
            return Result.error("不支持的文件类型");
        }

        // 获取文件的内容类型
        String contentType = file.getContentType();

        // 验证文件类型
        if ("image".equals(fileType)) {
            if (!"image/jpeg".equals(contentType) && !"image/png".equals(contentType)) {
                return Result.error("只支持JPEG或PNG格式的图片");
            }
        } else if ("video".equals(fileType)) {
            if (!"video/mp4".equals(contentType) && !"video/webm".equals(contentType)) {
                return Result.error("只支持MP4或WEBM格式的视频");
            }
        } else {
            return Result.error("不支持的文件类型");
        }
        
        try {
            BackgroundResource result = heyGenUploadService.uploadToHeyGen(file, fileType, contentType);
            return Result.success(result);
        } catch (Exception e) {
            return Result.error("上传失败: " + e.getMessage());
        }
    }
}